В этом сборнике представлены наиболее часто задаваемые вопросы из темы "Как сделать ?" на форуме QSP.su. Статьи разбиты на тематические разделы для удобства навигации по вопросам. В конце справочника представлены ссылки на материалы по каждому вопросу, некоторые из них могут работать некорректно в связи с перемещением ряда вопросов в тему "Как сделать?". К сожалению это не подлежит исправлению, однако для удобства поиска к ссылкам добавлена информация об авторе, дате и номере сообщения в теме.
Так же следует помнить, что все представленные в сборнике примеры даны в целях обучения. Не стоит тупо копировать их в свою игру, а потом бегать с претензиями типа "А вот я скопировал код отсюда, но он почему-то не работает", или "делает что-то не то". Важно прочитать статью и разобрать то, как работает пример. Ещё лучше, сначала самому попытаться решить поставленную задачу, а уже после обращаться к "F.A.Q". Данный сборник не является перечнем готовых решений.
Если вы нашли ошибку, опечатку или неточность, а так же если у вас есть замечания к статьям, или желание написать более развёрнутую и подробную их версию, пишите на aleksversus@mail.ru , либо в "ВК" https://vk.com/id40090736.
Обработка локации, посещение локации — под этими терминами понимаются следующие процессы: выполнение кода из поля "Выполнить при посещении" указанной локации, добавление в окно основного описания базового описания указанной локации, а так же добавление в окно действий базовых действий указанной локации. Обработка локации происходит в двух случаях: в случае "перехода" на локацию с помощью операторов goto и xgoto, или в случае "вызова" локации с помощью операторов gosub, menu, функции func или в качестве обработчика события в автоматическом режиме. С понятиями "переход на локацию" и "вызов локации" вы можете подробнее ознакомиться в разделе "Разница между goto и gosub".
индекс — в контексте данного справочника под индексом подразумевается указатель на какой-либо элемент. Например, у каждой ячейки массива есть собственный числовой индекс. Если массив состоит из пяти элементов, то его элементы нумеруются от нуля до четырёх — эти числа и являются индексами элементов. Для того, чтобы обратиться к какому-то конкретному элементу массива, нужно указать название этого массива, а за названием в квадратных скобках - индекс:
У элементов массивов могут быть текстовые индексы: mass["35,56"].
Индексы есть практически у всех исчислимых элементов для удобства обращения. Например, каждый символ строки обладает собственным индексом (номером), каждый предмет, добавленный в окно предметов тоже. И т.д. Если вы встречаете фразу "элементы индексируются с единицы", это означает, что нумерация элементов начинается с числа 1. Элементы массивов индексируются с нуля.
Переменная-маркер — это пользовательская (не системная) переменная, которую мы вводим, чтобы отмечать изменение события или состояния в игре. Например, переменной-маркером можно назвать переменную, обозначающую размещение предмета на локации:
Системная переменная — это зарезервированная в плеере переменная. Изменение её значения внутри игры изменяет настройки и поведение плеера. Например, системной является переменная nosave. Если её значение отлично от нуля, игрок не может пользоваться пунктами меню плеера "загрузить состояние игры" и "сохранить состояние игры":
Окна плеера могут называться по-разному:
В разделе "Зарезервированные слова, переменные и спецсимволы" используются обозначения:
Примечение. Символ # использован в справочнике только чтобы разделить выражения произвольного и числового типов. К синтаксису QSP данный символ отношения не имеет.
В том же разделе: если для оператора или функции не указана общая запись, значит этот оператор или функцию нужно запускать без аргументов. Например, оператор unselect, функция $curloc.
Спасибо всему сообществу QSP, подписчикам моего канала, а так же всем, кто задавал вопросы по изложенным в сборнике статьям.
Отдельная благодарность Nex'у, NickoAilus'у, Последнему из Гаяр, evp, newsash'у, Олегусу, Storm'у, Svartberg'у, Oliver'у, mkir'у, svandrus'у, Lisichk'е, Ajent'е, ejikplains'у, Larson'у, dmvikar'у, и всем прочим авторам, чьи наработки, примеры и кусочки кода послужили материалом для этих статей. Прошу прощения, кого забыл упомянуть.
Aleks Versus'HowDo-F.A.Q.'2021-2022
Aleks Versus'Game Adventure Making'Really Unimaginable Stories'2013-2022
1.1. В чём разница между set x=10, let x=10 и x=10?
1.2. В чём разница между переменной со знаком $ и без знака $?
1.3. В чём разница между ' ' (апострофы) и " " (кавычки)?
1.4. В чём разница между *pl "строка" и просто " строка" ?
1.5. Чем отличаются эти две команды? *pl "<<$perem>>" и *pl $perem
1.6. В чём разница между dynamic и dyneval?
1.7. В чём разница между gt и goto?
1.8. Чем отличается goto от gosub?
18.1. Чем отличаются команды addqst и openqst?
Источники и дополнительные материалы
2.1. Как сделать, чтобы значение переменной изменялось с течением времени?
2.2. Как сделать, чтобы из одной локации меня через пару секунд перебрасывало в другую локацию?
2.3. Как сделать, чтобы через пару секунд после входа на локацию появлялось новое действие?
2.4. Как сделать, чтобы цикл выполнялся параллельно остальному коду, а не прерывал его?
Источники и дополнительные материалы
3.1. Как вывести на экран отдельное окошко с текстом? | Подскажите аналог команды alert в QSP.
3.2. Как вывести на экран окошко, в котором игрок должен ввести текст? | Подскажите аналог команды prompt в QSP.
3.3. Как прикрутить возможность выбора варианта к окну msg? | Подскажите аналог команды confirm в QSP.
3.4. Как сделать ввод имени игроком?
3.5. Как увеличить число правильных ответов, которые может ввести игрок? | Как сделать варианты для ответа через $input?
Источники и дополнительные материалы
4.1. Как сделать меню предмета?
4.2. Как сделать разные меню для двух и более предметов?
4.3. Как сделать меню в ссылках?
4.4. Как передавать локациям-пунктам меню аргументы?
4.5. Как делать контекстное (динамическое) меню?
4.6. Как вставить разделитель в меню?
4.7. Как вставить картинки в меню?
Источники и дополнительные материалы
5.1. Как сделать так, чтобы не писать один и тот же код в каждой локации?
5.2. Как сделать кнопку "Назад", работающую на каждой локации?
5.3. Почему в args на локации-обработчике перехода на новую локацию уже есть данные?
Источники и дополнительные материалы
6.1. Как вставить музыку или звук в игру?
6.2. Как запустить две звуковые дорожки?
6.3. Как при переходе на новую локацию прервать одну мелодию и запустить другую?
6.4. Как перезапустить звуковую дорожку?
Источники и дополнительные материалы
7.1. Как делать гиперссылки, по нажатию на которые выполняется код? | Как делать кликабельный текст? | Как сделать, чтобы по нажатию на текст что-то происходило?
7.2. Как менять цвет гиперссылки?
7.3. Как помещать в гиперссылки сложный код?
7.4. Как сделать гиперссылки без подчёркивания?
Источники и дополнительные материалы
8.1. Какой командой можно очистить окно дополнительного описания?
8.2. Существует ли команда для того, чтобы получить название текущей локации?
8.3. Какой командой можно вывести текст в окно дополнительного описания?
8.4. Есть ли команда, которая делает выход из игры?
Источники и дополнительные материалы
9.1. Как вставить картинку в игру?
9.2. Можно ли вставить в игру gif-файл?
9.3. Как вставить картинку в действие?
9.4. Как поставить картинку фоном?
9.5. Как выводить изображения послойно? Накладывать друг на друга?
9.6. Как сделать кликабельное изображение? | Как сделать так, чтобы при щелчке по изображению выполнялись какие-то действия?
9.7. Как сделать сменяемое изображение на локации?
9.8. Как сделать вывод рандомного изображения?
Источники и дополнительные материалы
10.1. Для чего нужен оператор REFINT, и как он работает?
10.2. Как изменить цвет фона в игре?
10.3. Как изменить формат части текста? Размер, цвет, наклон и т.д.?
10.4. Как сделать красивый фон в классическом плеере?
10.5. Хочу, чтоб в игре окна располагались определённым образом. Как это сделать?
10.8. Как изменить цвет подсветки действий?
10.9. Как изменить цвет фона для отдельного окна?
10.10. Как сделать плавное появление текста? | Как сделать плавное изменение цвета фона? | Как сделать плавное изменение цвета текста?
10.11. Как использовать в игре собственный шрифт?
10.12. С предметов можно снимать выделение, а можно ли снять выделение с действия?
Источники и дополнительные материалы
11.1. При проверке условия записано просто число, без операции сравнения, но QSP не выдаёт ошибку. Почему?
11.2. Как сделать так, чтобы действие появлялось только при определённом условии?
11.3. Видел в одной из игр, как после нажатия на действие, оно становится неактивным. Как это сделать?
11.4. Как добавить текст, который будет выводиться только при выполнении определённого условия?
11.6. Как упростить условие с логическим И (AND)?
11.7. Как упростить взаимоисключающие условия? Логическое XOR.
Источники и дополнительные материалы
12.1. Зачем нужен оператор dynamic?
12.2. Можно ли сделать переменную с рандомным (случайным) названием?
12.3. Создаю действия с помощью цикла, но они работают неправильно. Что делать?
12.4. Почему не работает dynamic?
Источники и дополнительные материалы
13.1. Рисую таблицу и хочу зафиксировать высоту, но атрибут height не работает.
13.2. Пытаюсь использовать разные HTML-теги в игре, но они не работают — просто не выводятся. Почему?
13.3. Не работает IIF!
13.4. Пытаюсь сделать кликабельную картинку с помощью тегов MAP и AREA, но ничего не получается. | Не выводится картинка, не работает область клика, область клика смещена.
13.5. Не работает *pl в действии с goto.
13.6. В AeroQSP не работает атрибут.
13.7. Не работает гиперссылка в AeroQSP.
13.8. Не работает оператор JUMP — не может найти метку.
13.9. Не работает многострочный код. Как исправить?
13.10. Не работает многострочный код. Как исправить?
13.11. Сколько END`ов нужно добавить?
13.12. Не работает условие. Как исправить? (if skrom>10 and <15)
13.13. Не работают десятичные дроби, дробные числа, числа с запятыми!
Источники и дополнительные материалы
14.1. Как добавить предмет в окно предметов?
14.2. Как удалить предмет из окна предметов?
14.3. Как удалить все предметы?
14.4. Как добавить предмет в определённую позицию в окне предметов?
14.5. Как заменить один предмет на другой?
14.6. Как делать динамические/считаемые предметы? | Как делать стакающиеся предметы? | Как делать предметы рядом с названиями которых выводится их количество?
14.7. Как добавить предмет с картинкой но без названия?
14.8. Как сделать, чтоб при щелчке по предмету выполнялся какой-либо код?
14.9. Как снять выделение предмета? | Как сделать, чтобы выбранный предмет можно было кликнуть ещё раз?
14.10. Как сделать два списка предметов? Например для игры за разных персонажей.
14.11. Как сделать, чтобы плеер выполнял определённый код при добавлении любого предмета?
14.12. Как сделать два разных предмета с одинаковыми названиями?
14.13. Как сделать многоуровневый рюкзак? | Как сделать предметы в предметах?
14.14. Можно ли выводить предметы не в окне предметов?
Источники и дополнительные материалы
15.1. Зачем вообще нужна строка ввода (поле ввода)?
15.2. Как задействовать строку ввода в игре?
Источники и дополнительные материалы
16.1. Можно ли писать текст поверх вставленной картинки (не бэкграунда)?
16.2. Возможно ли сделать плавный переход между локациями?
16.3. Как расположить картинку справа, а текст слева?
16.4. Как ограничить размер выводимого изображения?
16.5. Как сделать рамку окна основного описания? | Как сделать, чтобы картинки шли по контуру основного окна?
16.6. Как сделать вывод предметов магазина не длинным списком, а в виде таблицы?
16.7. Можно ли зеркально отразить картинку методами плеера? | Можно ли задать максимальную или минимальную ширину элементу? | Можно ли вычислить доступное место в основном окне?
16.9. Можно как нибудь вывести текст в два столба в классике? К примеру характеристики персонажей.
16.10. Как работать с тегами MAP и AREA? Как разметить картинку на кликабельные зоны?
Источники и дополнительные материалы
17.1. Как запретить игроку самостоятельно сохранять игру?
17.3. Как сделать чекпойнты в игре?
Источники и дополнительные материалы
18.1. Чем отличаются команды addqst и openqst?
18.2. Как сделать лаунчер?
18.3. Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?
Источники и дополнительные материалы
19.1. Как использовать ASCII-графику в QSP?
19.2. Как вставить в игру видео?
19.3. Как сделать так, чтобы текст появлялся на экране постепенно? По буквам?
19.4. Как защитить игру от чита?
19.5. Как задействовать клавиатуру в игре?
19.6. Как пропустить прохождение нескольких глав, чтобы протестировать вновь написанную главу и только её?
19.7. Как из под плеера выполнить произвольную строку кода?
19.8. Как узнать, на каком устройстве запущена игра? Телефон, компьютер, планшет?
19.9. Как обновлять переменные на экране?
19.10. Как сделать, чтобы текст выводился снизу вверх?
Источники и дополнительные материалы
20.1. Как сделать возврат на предыдущую локацию?
20.2. Как проверить число на чётность?
20.4. Как сделать, чтобы текст выводился не внизу окна основного описания, а сверху?
20.5. Как можно удалить часть текста из описания?
20.6. Как вывести на экран HTML-разметку, не отключая режим распознавания HTML? То есть при usehtml=1.
20.8. Как в QSP сравнить два массива?
20.11. Как сделать проценты?
20.12. Как решить задачу по поиску случайного набора слагаемых?
20.13. Как разредить текст пробелами?
20.14. Как сделать записную книжку в игре?
20.15. Как сделать так, чтобы на локацию можно было зайти только один раз?
20.16. Как заставить действия выводиться в нужном мне порядке?
20.17. Как сделать в игре книгу? Чтобы её можно было взять и потом прочитать?
20.18. Как сделать склад, сундук, тайник, место, в котором можно выкладывать и хранить предметы?
20.19. Как сделать выпадение случайного действия на локации?
20.20. Как сделать перемещение на случайную локацию?
20.21. Как сделать случайный предмет?
20.22. Как узнать, какие переменные есть в игре? Может для этого есть специальная команда?
20.23. Как убрать преформатирование из HTML-разметки?
Источники и дополнительные материалы
Источники и дополнительные материалы
22.1. Пишу несколько игр в Quest Navigator. Как сделать, чтобы у каждой игры было собственное оформление?
22.2. Как подключить свой шрифт к игре?
22.4. Хочу прописать игре собственный вид курсора, как это сделать?
22.6. Как узнать, на каком плеере запущена игра, на классическом QSP, или на Quest Navigator?
22.7. Как вставить видео в игру на Навигаторе?
22.8. Как делать standalone-сборку на Навигаторе? | Независимая сборка на Quest Navigator
22.10. Как выполнить JavaScript прямо из кода QSP?
22.11. Инструкция посмене оформления из кода QSP?
Источники и дополнительные материалы
23.2. Хочу разместить на локации около 100 действий. Это вообще возможно?
Источники и дополнительные материалы
24.1. Как сделать так, чтобы AeroQSP запускался прямо из Quest Generator?
24.2. Как сделать StandAlone-сборку на классическом плеере? | Можно ли сделать игру так, чтобы играть без плеера? | Как сделать пакетный файл запуска, чтобы игрок тыкал иконку start и сразу начинал играть?
Источники и дополнительные материалы
Алфавитный указатель ключевых слов, спецсимволов, синтаксем